#ifndef __HEAD__PLANET__
#define __HEAD__PLANET__

#include "GL/glut.h"
#include <string>
#include <vector>
using namespace std;

class planet
{
	protected:

		string name;
		GLuint clstnum;
		GLuint rvCircle;

		double radius;				//星球半径 		相对地球半径
		double mass;				//星球质量		相对地球质量
		double rotationPeriod;		//自转周期 		地球日
		double rotationAngle;		//当前自转角度 	弧度
		double revolutionRadius; 	//公转半径 		天文单位（地日距离）
		double revolutionPeriod; 	//公转周期 		地球年
		double revolutionAngle; 	//当前公转角度 	弧度
		double rtrvAngle; 			//黄赤交角		角度
		double rvreAngle; 			//公转轨道面 	相对地球公转轨道面 角度
		double colorr;
		double colorg;
		double colorb;
		
		static double AUshrink;			//相对天文单位，星球尺寸太小，缩小天文单位显示，该变量表示缩小的倍数。
		static double earthYearTime; 	//一个地球年的时间 秒
	
	public:
	
		typedef vector< planet* > planetArr;
		const static double AU=23453.9; //天文单位，	相对地球半径
		const static double PAI=3.1416; 
		planet(string pn, 
			double r, double m, double rtp, double rvr, double rvp, double rtrv, double rvre,
			double cr=1.0, double cg=0.0, double cb=0.0);

		void draw(long step = 0);

//get methods
		static double getAUshrink()
		{
			return planet::AUshrink;
		}		
		
		double getrtrvAngle()
		{
			return this->rtrvAngle;
		}	
		double getrvreAngle()
		{
			return this->rvreAngle;
		}
		double getRadius()
		{
			return this->radius;
		}
		double getMass()
		{
			return this->mass;
		}	
		double getRotationPeriod()
		{
			return this->rotationPeriod;
		}
		double getRotationAngle()
		{
			return this->rotationAngle;
		}
		double getRevolutionRadius()
		{
			return this->revolutionRadius;
		}
		double getRevolutionPeriod()
		{
			return this->revolutionPeriod;
		}
		double getRevolutionAngle()
		{
			return this->revolutionAngle;
		}
//set methods
		void static setAUshrink(double val)
		{
			if(val > 1.0)
			{
				planet::AUshrink = val;
			}		
		}

		void static setEarthYearTime(double val)
		{
			if(val > 1.0)
			{
				planet::earthYearTime = val;
			}		
		}
};

void solaryDraw();

int pcomputemain();

#endif
